TypeScript 1.5
完整的破坏性改动列表请到这里查看:breaking change issues。
不允许在箭头函数里引用arguments
这是为了遵循ES6箭头函数的语义。之前箭头函数里的arguments会绑定到箭头函数的参数。参照ES6规范草稿 9.2.12,箭头函数不存在arguments对象。
从TypeScript 1.5开始,在箭头函数里使用arguments会被标记成错误以确保你的代码转成ES6时没语义上的错误。
例子:
function f() {
return () => arguments; // Error: The 'arguments' object cannot be referenced in an arrow function.
}
推荐:
// 1. 使用带名字的剩余参数
function f() {
return (...args) => { args; }
}
// 2. 使用函数表达式
function f() {
return function(){ arguments; }
}
内联枚举引用的改动
对于正常的枚举,在1.5之前,编译器仅会内联常量成员,且成员仅在使用字面量初始化时才被当做是常量。这在判断检举值是使用字面量初始化还是表达式时会行为不一致。从TypeScript 1.5开始,所有非const枚举成员都不会被内联。
例子:
var x = E.a; // previously inlined as "var x = 1; /*E.a*/"
enum E {
a = 1
}
推荐:
在枚举声明里添加const修饰符来确保它总是被内联。
更多信息,查看#2183。
上下文的类型将作用于super和括号表达式
在1.5之前,上下文的类型不会作用于括号表达式内部。这就要求做显示的类型转换,尤其是在必须使用括号来进行表达式转换的场合。
在下面的例子里,m具有上下文的类型,它在之前的版本里是没有的。
var x: SomeType = (n) => ((m) => q);
var y: SomeType = t ? (m => m.length) : undefined;
class C extends CBase {
constructor() {
super({
method(m) { return m.length; }
});
}
}
DOM接口的改动
TypeScript 1.5改进了lib.d.ts库里的DOM类型。这是自TypeScript 1.0以来第一次大的改动;为了拥抱标准DOM规范,很多特定于IE的定义被移除了,同时添加了新的类型如Web Audio和触摸事件。
变通方案:
你可以使用旧的lib.d.ts配合新版本的编译器。你需要在你的工程里引入之前版本的一个拷贝。这里是本次改动之前的lib.d.ts文件(TypeScript 1.5-alpha)。
变动列表:
- 属性
selection从Document类型上移除 - 属性
clipboardData从Window类型上移除 - 删除接口
MSEventAttachmentTarget - 属性
onresize,disabled,uniqueID,removeNode,fireEvent,currentStyle,runtimeStyle从HTMLElement类型上移除 - 属性
url从Event类型上移除 - 属性
execScript,navigate,item从Window类型上移除 - 属性
documentMode,parentWindow,createEventObject从Document类型上移除 - 属性
parentWindow从HTMLDocument类型上移除 - 属性
setCapture被完全移除 - 属性
releaseCapture被完全移除 - 属性
setAttribute,styleFloat,pixelLeft从CSSStyleDeclaration类型上移除 - 属性
selectorText从CSSRule类型上移除 CSSStyleSheet.rules现在是CSSRuleList类型,而非MSCSSRuleListdocumentElement现在是Element类型,而非HTMLElementEvent具有一个新的必需属性returnValueNode具有一个新的必需属性baseURIElement具有一个新的必需属性classListLocation具有一个新的必需属性origin- 属性
MSPOINTER_TYPE_MOUSE,MSPOINTER_TYPE_TOUCH从MSPointerEvent类型上移除 CSSStyleRule具有一个新的必需属性readonly- 属性
execUnsafeLocalFunction从MSApp类型上移除 - 全局方法
toStaticHTML被移除 HTMLCanvasElement.getContext现在返回CanvasRenderingContext2D | WebGLRenderingContex- 移除扩展类型
Dataview,Weakmap,Map,Set XMLHttpRequest.send具有两个重载send(data?: Document): void;和send(data?: String): void;window.orientation现在是string类型,而非number- 特定于IE的
attachEvent和detachEvent从Window上移除
以下是被新加的DOM类型所部分或全部取代的代码库的代表:
DefinitelyTyped/auth0/auth0.d.tsDefinitelyTyped/gamepad/gamepad.d.tsDefinitelyTyped/interactjs/interact.d.tsDefinitelyTyped/webaudioapi/waa.d.tsDefinitelyTyped/webcrypto/WebCrypto.d.ts
更多信息,查看完整改动。
类代码体将以严格格式解析
按照ES6规范,类代码体现在以严格模式进行解析。行为将相当于在类作用域顶端定义了"use strict";它包括限制了把arguments和eval做为变量名或参数名的使用,把未来保留字做为变量或参数使用,八进制数字字面量的使用等。